Groovy তে MetaClass এবং Runtime Modifications হলো এমন কিছু বৈশিষ্ট্য যা Class এবং Object এর আচরণ পরিবর্তন করার ক্ষমতা প্রদান করে, বিশেষত Runtime এ। MetaClass এর মাধ্যমে Groovy তে ডায়নামিক মেথড, প্রপার্টি সংযোজন এবং Class এর আচরণ পরিবর্তন করা যায়। এই ক্ষমতা প্রোগ্রামিংকে আরও নমনীয় এবং ডায়নামিক করে তোলে এবং এটি বিশেষত গ্রোভির মেটাপ্রোগ্রামিং বৈশিষ্ট্যের অন্তর্গত।
MetaClass হলো Groovy তে একটি বিশেষ ধরনের ক্লাস যা প্রতিটি Groovy ক্লাসের সাথে যুক্ত থাকে এবং এটি ক্লাসের প্রপার্টি ও মেথডগুলোর বিবরণ ধারণ করে। MetaClass ব্যবহার করে আমরা রানটাইমে কোনো ক্লাস বা অবজেক্টের আচরণ পরিবর্তন করতে পারি, যেমন নতুন মেথড যোগ করা, বিদ্যমান মেথড ওভাররাইড করা ইত্যাদি।
MetaClass ব্যবহার করে Runtime এ কোনো Class এ নতুন মেথড যোগ করা যায়।
class Person {
String name
}
// Runtime এ নতুন মেথড যোগ করা
Person.metaClass.sayHello = { -> "Hello, my name is $name" }
def person = new Person(name: "Alice")
println person.sayHello() // Output: Hello, my name is Alice
এখানে Person
ক্লাসে sayHello
নামে একটি নতুন মেথড যোগ করা হয়েছে MetaClass এর মাধ্যমে, যা রানটাইমে ব্যবহার করা সম্ভব।
MetaClass ব্যবহার করে রানটাইমে বিদ্যমান মেথড ওভাররাইড করা সম্ভব।
class Calculator {
def add(int a, int b) {
return a + b
}
}
// Runtime এ add() মেথড ওভাররাইড করা
Calculator.metaClass.add = { int a, int b -> a * b }
def calculator = new Calculator()
println calculator.add(5, 3) // Output: 15
এখানে Calculator
ক্লাসের add()
মেথডকে Runtime এ ওভাররাইড করে নতুন মেথড হিসাবে ব্যবহার করা হয়েছে, যা এখন যোগের পরিবর্তে গুণ করছে।
MetaClass ব্যবহার করে একটি Object এ নতুন Property যোগ করা যায় বা বিদ্যমান Property পরিবর্তন করা যায়।
class Person {
String name
}
// Runtime এ age নামে একটি নতুন Property যোগ করা
Person.metaClass.age = 25
def person = new Person(name: "Bob")
println "${person.name} is ${person.age} years old" // Output: Bob is 25 years old
এখানে Person
ক্লাসে age
নামে নতুন একটি Property যোগ করা হয়েছে MetaClass এর মাধ্যমে, যা রানটাইমে ব্যবহার করা সম্ভব।
Groovy তে methodMissing
এবং propertyMissing
নামের মেথড দুটি ব্যবহৃত হয় অজানা মেথড বা প্রপার্টি কল করার জন্য। এগুলোর মাধ্যমে ডায়নামিক মেথড এবং প্রপার্টি তৈরি করা যায়।
class DynamicPerson {
def methodMissing(String name, args) {
return "Called method $name with arguments $args"
}
}
def person = new DynamicPerson()
println person.sayHello("Alice") // Output: Called method sayHello with arguments [Alice]
এখানে sayHello
মেথড DynamicPerson
ক্লাসে সংজ্ঞায়িত না থাকলেও, methodMissing
মেথড ব্যবহার করে এটি ডায়নামিকভাবে একটি মেসেজ রিটার্ন করছে।
Groovy তে ExpandoMetaClass
ব্যবহার করে আরও সহজে এবং সরাসরি ক্লাস মডিফিকেশন করা যায়। এটি MetaClass এর মতোই কাজ করে তবে বেশি নমনীয় এবং দ্রুত।
class Person {
String name
}
// ExpandoMetaClass ব্যবহার করে মেথড যোগ করা
Person.metaClass.sayGoodbye = { -> "Goodbye, $name" }
def person = new Person(name: "Alice")
println person.sayGoodbye() // Output: Goodbye, Alice
ExpandoMetaClass
ব্যবহারে MetaClass এর মতোই নতুন মেথড বা প্রপার্টি যোগ করা যায়।
Groovy তে Category Class ব্যবহার করে একটি নির্দিষ্ট Block এর জন্য রানটাইমে মেথড বা প্রপার্টি যোগ করা যায়। এটি Temporary Runtime Modifications করার জন্য ব্যবহার করা হয়।
class StringCategory {
static String shout(String str) {
return str.toUpperCase()
}
}
use(StringCategory) {
println "hello".shout() // Output: HELLO
}
এখানে StringCategory
নামের একটি ক্যাটাগরি ক্লাস ব্যবহার করে String
ক্লাসে shout
নামে একটি মেথড যোগ করা হয়েছে, যা শুধুমাত্র use
ব্লকের মধ্যে কার্যকর থাকবে।
MetaClass এবং Runtime Modifications এর মাধ্যমে Groovy তে ডায়নামিক এবং নমনীয় প্রোগ্রামিং করা সহজ হয়, যা প্রোগ্রামারদের দ্রুত এবং ডায়নামিক কোড তৈরি করতে সাহায্য করে।
common.read_more